// [bm] no TaskBar ///******************************************************************************* // * Copyright (c) 2010 IBM Corporation and others. // * All rights reserved. This program and the accompanying materials // * are made available under the terms of the Eclipse Public License v1.0 // * which accompanies this distribution, and is available at // * http://www.eclipse.org/legal/epl-v10.html // * // * Contributors: // * Tasktop Technologies - initial API and implementation // ******************************************************************************/ // //package org.eclipse.ui.internal.progress; // //import java.util.ArrayList; //import java.util.Collections; //import java.util.HashMap; //import java.util.List; //import java.util.Map; //import org.eclipse.core.runtime.Assert; //import org.eclipse.core.runtime.IProgressMonitor; //import org.eclipse.core.runtime.IStatus; //import org.eclipse.core.runtime.Status; //import org.eclipse.core.runtime.jobs.Job; //import org.eclipse.swt.SWT; //import org.eclipse.swt.events.DisposeEvent; //import org.eclipse.swt.events.DisposeListener; //import org.eclipse.swt.widgets.TaskItem; //import org.eclipse.ui.progress.IProgressConstants2; //import org.eclipse.ui.progress.WorkbenchJob; // ///** // * The TaskBarProgressManager is the class that displays progress in the // * application TaskBar if the job specifies that it should show progress (@see // * {@link IProgressConstants2#SHOW_IN_TASKBAR_ICON_PROPERTY} // * // * @since 3.6 // */ //public class TaskBarProgressManager { // // private IJobProgressManagerListener listener; // // private WorkbenchJob animationUpdateJob; // // private boolean isAnimated = false; // // private List jobs = Collections.synchronizedList(new ArrayList()); // // private Map jobInfoMap = Collections.synchronizedMap(new HashMap()); // // private final TaskItem taskItem; // // public TaskBarProgressManager(TaskItem taskItem) { // Assert.isNotNull(taskItem); // this.taskItem = taskItem; // animationUpdateJob = getAnimationUpdateJob(); // animationUpdateJob.setSystem(true); // listener = getProgressListener(); // // // Register the IJobProgressManagerListener so we can display progress // // on the application TaskBar // ProgressManager.getInstance().addListener(listener); // // taskItem.addDisposeListener(new DisposeListener() { // public void widgetDisposed(DisposeEvent e) { // dispose(); // } // }); // } // // /** // * Remove the listener and stop the animation // */ // public void dispose() { // ProgressManager.getInstance().removeListener(listener); // setAnimated(false); // } // // private WorkbenchJob getAnimationUpdateJob() { // return new WorkbenchJob(ProgressMessages.AnimationManager_AnimationStart) { // // /* // * (non-Javadoc) // * // * @see // * org.eclipse.ui.progress.UIJob#runInUIThread(org.eclipse.core. // * runtime .IProgressMonitor) // */ // public IStatus runInUIThread(IProgressMonitor monitor) { // if (isAnimated) { // if (!taskItem.isDisposed() && !jobs.isEmpty()) { // Job job = (Job) jobs.get(0); // JobInfo jobInfo = (JobInfo) jobInfoMap.get(job); // if (job != null && jobInfo != null) { // int percentDone = getPercentDone(jobInfo); // if (percentDone == IProgressMonitor.UNKNOWN // || (jobInfo.hasTaskInfo() && jobInfo.getTaskInfo().totalWork == IProgressMonitor.UNKNOWN)) { // setProgressState(SWT.INDETERMINATE); // } else { // setProgressState(SWT.NORMAL); // if (!taskItem.isDisposed()) { // taskItem.setProgress(percentDone); // } // } // } else { // setProgressState(SWT.DEFAULT); // } // } // } else { // setProgressState(SWT.DEFAULT); // } // // if (isAnimated && taskItem != null && !taskItem.isDisposed()) { // schedule(400); // } // return Status.OK_STATUS; // } // // private void setProgressState(int state) { // if (!taskItem.isDisposed() && taskItem.getProgressState() != state) { // taskItem.setProgressState(SWT.DEFAULT); // taskItem.setProgressState(state); // } // } // // private int getPercentDone(JobTreeElement info) { // if (info.isJobInfo()) { // return ((JobInfo) info).getPercentDone(); // } // // if (info.hasChildren()) { // Object[] roots = ((GroupInfo) info).getChildren(); // if (roots.length == 1 && roots[0] instanceof JobTreeElement) { // TaskInfo ti = ((JobInfo) roots[0]).getTaskInfo(); // if (ti != null) { // return ti.getPercentDone(); // } // } // return ((GroupInfo) info).getPercentDone(); // } // return 0; // } // }; // } // // private IJobProgressManagerListener getProgressListener() { // return new IJobProgressManagerListener() { // // /* // * (non-Javadoc) // * // * @see // * org.eclipse.ui.internal.progress.IJobProgressManagerListener# // * addJob(org.eclipse.ui.internal.progress.JobInfo) // */ // public void addJob(JobInfo info) { // // Don't count the animate job itself // if (isNotTracked(info)) { // return; // } // if (jobs.isEmpty()) { // setAnimated(true); // } // if (!jobs.contains(info.getJob())) { // jobs.add(info.getJob()); // } // jobInfoMap.put(info.getJob(), info); // } // // /* // * (non-Javadoc) // * // * @see // * org.eclipse.ui.internal.progress.IJobProgressManagerListener# // * refreshJobInfo(org.eclipse.ui.internal.progress.JobInfo) // */ // public void refreshJobInfo(JobInfo info) { // int state = info.getJob().getState(); // if (state == Job.RUNNING) { // addJob(info); // } else { // removeJob(info); // } // } // // /* // * (non-Javadoc) // * // * @see // * org.eclipse.ui.internal.progress.IJobProgressManagerListener# // * refreshAll() // */ // public void refreshAll() { // ProgressManager manager = ProgressManager.getInstance(); // jobs.clear(); // jobInfoMap.clear(); // setAnimated(false); // JobInfo[] currentInfos = manager.getJobInfos(showsDebug()); // for (int i = 0; i < currentInfos.length; i++) { // addJob(currentInfos[i]); // } // } // // /* // * (non-Javadoc) // * // * @see // * org.eclipse.ui.internal.progress.IJobProgressManagerListener# // * remove(org.eclipse.ui.internal.progress.JobInfo) // */ // public void removeJob(JobInfo info) { // jobs.remove(info.getJob()); // jobInfoMap.remove(info.getJob()); // if (jobs.isEmpty()) { // setAnimated(false); // } // } // // /* // * (non-Javadoc) // * // * @see // * org.eclipse.ui.internal.progress.IJobProgressManagerListener# // * showsDebug() // */ // public boolean showsDebug() { // return false; // } // // /** // * If the job isn't running or doesn't specify the // * IProgressConstants#SHOW_IN_TASKBAR_ICON_PROPERTY property, don't // * bother tracking it. // */ // private boolean isNotTracked(JobInfo info) { // Job job = info.getJob(); // return job.getState() != Job.RUNNING || !shouldShowSystemProgress(info); // } // // private boolean shouldShowSystemProgress(JobInfo info) { // Boolean showInTaskBarIcon = Boolean.FALSE; // Object property = info.getJob().getProperty( // IProgressConstants2.SHOW_IN_TASKBAR_ICON_PROPERTY); // // if (property instanceof Boolean) { // showInTaskBarIcon = (Boolean) property; // } // return showInTaskBarIcon.booleanValue(); // // } // // /* // * (non-Javadoc) // * // * @see // * org.eclipse.ui.internal.progress.IJobProgressManagerListener# // * addGroup(org.eclipse.ui.internal.progress.GroupInfo) // */ // public void addGroup(GroupInfo info) { // // Don't care about groups // } // // /* // * (non-Javadoc) // * // * @see // * org.eclipse.ui.internal.progress.IJobProgressManagerListener# // * removeGroup(org.eclipse.ui.internal.progress.GroupInfo) // */ // public void removeGroup(GroupInfo group) { // // Don't care about groups // } // // /* // * (non-Javadoc) // * // * @see // * org.eclipse.ui.internal.progress.IJobProgressManagerListener# // * refreshGroup(org.eclipse.ui.internal.progress.GroupInfo) // */ // public void refreshGroup(GroupInfo info) { // // Don't care about groups // } // }; // } // // private synchronized void setAnimated(boolean animated) { // isAnimated = animated; // animationUpdateJob.schedule(); // } //}